package java201904016test01;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class StudentMaster {
	//属性
	//学生信息集合对象
	private List arrStus;

	
	//行为
	
	public StudentMaster() {
		super();
		// 调用初始化方法
		init();
	}
	
	public void showScore() {
		
		//初始化
		//init（）；
		
		//排序
		bubbleSort();
		
		//打印信息
		printArr();
	}
	//数据录入行为
	private void init() {
		// 准备数据
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入班级学生人数：");
		//学生人数
		int count =sc.nextInt();
		// 根据学生人数创建学生数组
		// 此处初始化的是成员变量，而不是局部变量
		arrStus = new ArrayList(count);
		//增添数据（可以控制输入台）
		for(int i=0;i<count;i++) {
			//输入参数
			System.out.println("请输入第"+(i+1)+"个学生的姓名");
			String strName=sc.next();
			System.out.println("请输入第"+(i+1)+"个学生的学号");
			String strNum=sc.next();
			System.out.println("请输入第"+(i+1)+"个学生的成绩");
			double fScore=sc.nextDouble();
			//根据输入的参数，构建一个学生的对象实例
			Student stu =new Student(strName,strNum,fScore);
			//吧创建的学生对象放到学生数组中
			arrStus.add(stu);
		}
				
	}
	//排序行为
	/**
	 * 冒泡排序算法【从小到大】
	 */
	private void bubbleSort() {
		
		//提供Student比较器
		
		Collections.sort(arrStus, new Comparator<Student>(){

			@Override
			public int compare(Student o1, Student o2) {
				// 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象，则分别返回负整数、零或正整数。
				// 默认返回值(相等)
				int i_re = 0;
				// 临时变量
				Student stu0, stu1;
				// 学生排序的比较（按成绩排序）
				if (o1 == null || o2 == null) {
					// 业务：有一个为null则返回0
					i_re = 0;
				} else if ((stu0 = (Student) o1).getStuScore() > ((stu1 = (Student) o2)).getStuScore()) {
					String stuName = stu0.getStuName();
					// 大于情况
					i_re = 1;
				} else if ((stu0 = (Student) o1).getStuScore() < ((stu1 = (Student) o2)).getStuScore()) {
					// 小于情况
					i_re = -1;
				}
				return i_re * -1;
			}
		});
			
	
		}
		
		
	

	

	//学生信息输出行为
	/**
	 * 打印数组
	 */
	private void printArr() {
		for(Object i :arrStus) {
			((Student)i).printMe();
		}
		//换行
		System.out.println();
		
	}

}
